"""
StarWeb 认证框架应用入口文件
实现应用启动功能和服务器配置
"""
import uvicorn
import os
from pathlib import Path

# 设置项目根目录
BASE_DIR = Path(__file__).parent.absolute()
os.chdir(BASE_DIR)


# 导入配置模块
from pkg.settings.config import settings


def create_application():
    """创建应用并返回"""
    # 引入控制循环依赖
    from pkg.core.app import create_app
    
    # 创建应用 - 路由注册会在 pkg/core/urls.py 的 register_module_routes 中处理
    app = create_app()
    
    # 注意: 不再在这里调用 initialize_apps
    # 路由注册已经在 pkg.core.urls.register_module_routes 中完成
    # 避免重复注册路由
    
    return app


async def startup_db_client():
    """在应用启动时连接数据库"""
    from pkg.core.database.db import init_db, generate_schemas
    
    # 初始化数据库连接
    await init_db()
    
    # 根据配置决定是否生成数据库表结构
    # 检查DEBUG模式或者MIGRATE设置
    if settings.MIGRATE:
        await generate_schemas()


async def shutdown_db_client():
    """在应用关闭时断开数据库连接"""
    from pkg.core.database.db import close_db
    
    # 关闭数据库连接
    await close_db()


# 创建 FastAPI 应用
app = create_application()

# 注册启动和关闭事件
app.add_event_handler("startup", startup_db_client)
app.add_event_handler("shutdown", shutdown_db_client)


# if __name__ == "__main__":

    
#     # 启动应用服务器
#     uvicorn.run(
#         "main:app",
#         host=settings.HOST,
#         port=settings.PORT,
#         reload=settings.RELOAD,
#         workers=settings.WORKERS if settings.WORKERS > 0 else None,
#         log_level=settings.LOG_LEVEL.lower(),
#     )
